package com.shujia.scala

object Demo29implicit {
  def main(args: Array[String]): Unit = {


    /**
      * 隐式转换  --  隐式类型转换
      * 显示转换  --  显示类型转换
      *
      */

    //1、显示转换
    val s = "100"
    val i: Int = s.toInt


    def print(s: String): Unit = {
      println(s)
    }

    print("java")
    //显示转换
    print(100.toString)

    /**
      * 1、隐式转换方法
      * 隐式转换只在当前作用域中起作用
      *
      * 隐式转换方法，可以隐式的将参数类型转换成返回值类型，当前作用域中所有的参数类型的变量都可以
      * 当成返回值类型来使用
      *
      *
      * 隐式转换方法和方法名无关, 和参数类型返回值类型有关，
      * 在同一个作用域中只能存储一种(参数类型和返回值类型一样的)隐式转换
      *
      */
    implicit def intToString(i: Int): String = {

      println("隐式转换方法被调用")

      i.toString
    }

    implicit def intToDouble(i: Int): Double = {

      println("隐式转换方法被调用")

      i.toDouble
    }


    implicit def doubleToString(i: Double): String = {

      println("隐式转换方法被调用")

      i.toString
    }

    /**
      *
      * 在执行的时候会隐式的将Int转换成String类型
      * 隐式调用上面的intToString方法
      */
    print(1000)

    print(100.0123)



  }

}
